package com.example.myapplication12_1;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity {

    // 定义需要用到的视图组件
    private BallView ballView;                // 自定义的球形视图
    private ImageButton btnUp, btnDown, btnLeft, btnRight;  // 四个方向按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  // 加载布局文件

        // 初始化所有视图组件
        initViews();

        // 为每个方向按钮设置触摸监听器
        setupDirectionButtons();
    }

    // 初始化视图组件的方法
    private void initViews() {
        ballView = findViewById(R.id.ballView);      // 找到球形视图
        btnUp = findViewById(R.id.btnUp);            // 找到上方向按钮
        btnDown = findViewById(R.id.btnDown);        // 找到下方向按钮
        btnLeft = findViewById(R.id.btnLeft);        // 找到左方向按钮
        btnRight = findViewById(R.id.btnRight);      // 找到右方向按钮
    }

    // 为每个方向按钮设置触摸监听器的方法
    private void setupDirectionButtons() {
        // 设置上方向按钮的触摸效果和动作
        setupButton(btnUp, R.drawable.arrow1_up, R.drawable.arrow1_up_press,
                new ButtonAction() {
                    @Override
                    public void run() {
                        ballView.moveUp();  // 点击时让球向上移动
                    }
                });

        // 设置下方向按钮的触摸效果和动作
        setupButton(btnDown, R.drawable.arrow1_down, R.drawable.arrow1_down_press,
                new ButtonAction() {
                    @Override
                    public void run() {
                        ballView.moveDown();  // 点击时让球向下移动
                    }
                });

        // 设置左方向按钮的触摸效果和动作
        setupButton(btnLeft, R.drawable.arrow1_left, R.drawable.arrow1_left_press,
                new ButtonAction() {
                    @Override
                    public void run() {
                        ballView.moveLeft();  // 点击时让球向左移动
                    }
                });

        // 设置右方向按钮的触摸效果和动作
        setupButton(btnRight, R.drawable.arrow1_right, R.drawable.arrow1_right_press,
                new ButtonAction() {
                    @Override
                    public void run() {
                        ballView.moveRight();  // 点击时让球向右移动
                    }
                });
    }

    // 设置按钮触摸效果和动作的方法
    @SuppressLint("ClickableViewAccessibility")
    private void setupButton(ImageButton button, int normalImage, int pressedImage, ButtonAction action) {
        // 当手指按下/抬起按钮时触发的监听器
        button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // 根据手指动作做不同处理
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:  // 手指按下按钮时
                        button.setImageResource(pressedImage);  // 显示按下状态的图片
                        ballView.startContinuousMove(action); // 开始连续移动
                        return true;

                    case MotionEvent.ACTION_UP:    // 手指离开按钮时
                    case MotionEvent.ACTION_CANCEL: // 按钮被取消时（比如被系统中断）
                        button.setImageResource(normalImage);  // 恢复正常状态的图片
                        ballView.stopContinuousMove(); // 停止移动
                        return true;
                }
                return false;
            }
        });
    }

    // 按钮动作接口（定义按钮点击后要执行的操作）
    interface ButtonAction {
        void run();  // 执行按钮对应的动作（如移动方向）
    }
}